Агуулгын хүснэгт:
- Алхам 1: Техник хангамж ба програм хангамжийн шаардлага
- Алхам 2: STM32CubeMX -ийн тохиргоо
- Алхам 3: Keil UVision кодчилол
- Алхам 4: Үр дүн:)
Видео: STM32F4 ARM MCU бүхий Servo моторын хяналт: 4 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:02
Сайн байцгаана уу найзуудаа:) Тиймээс энэ төсөлд бид STM32F4 ARM MCU бүхий servo моторыг удирдах болно. Миний хувьд би нээлтийн самбарыг ашиглах болно, гэхдээ хэрэв та асуудлын мөн чанарыг ойлговол та үүнийг MCU бүрт хэрэглэж болно. Тиймээс. Эхэлцгээе:)
Алхам 1: Техник хангамж ба програм хангамжийн шаардлага
Тоног төхөөрөмжийн хувьд бидэнд дараахь зүйлс хэрэгтэй болно.
- Миний хувьд STM32f4 Discovery самбартай MCU
- SG90 эсвэл бусадтай адил түгээмэл servo мотор
Програм хангамжийн хувьд бидэнд дараахь зүйлс хэрэгтэй болно.
- STM32CubeMX
- Keil uVision
Хэрэв танд энэ бүхэн байгаа бол дараагийн алхам руу орно уу:)
Алхам 2: STM32CubeMX -ийн тохиргоо
Таны мэдэж байгаагаар servo моторыг хянахын тулд бидэнд ХОУХД -ийн дохио хэрэгтэй болно. ХОУХ -ны дохионы шаардлагууд дараах байдалтай байна.
- ХБХ -ны хугацаа 20 мS байх ёстой
- Цаг нь 0.5 -аас 2.5 мС хооронд байх ёстой. Цаг нь 0.5 мС байх үед servo нь 0 градус, 90 градусын хувьд 1.5 mS, 180 градусын хувьд 2.5 mS болно.
Тиймээс бид PWM -ийг тохируулах хэрэгтэй бөгөөд энэ зорилгоор Timer1 -ийг ашиглах болно.
- Эхлээд таймер хэсгээс TIM1 -ийг сонгоно уу. Энэ алхам
-
Дараа нь Mode хэсгээс
- Дотоод цагийг сонгоно уу Энэ алхам
- ХОУХ -ны үеийн CH1 Энэ алхам
-
Дараа нь Тохиргоо хэсгээс
- Prescaler -ийг 160 болгож тохируулна уу Энэ алхам
- Тоолуурын хугацааг 2000 гэж тохируулах Энэ алхам
- Пульсыг 50 болгож тохируулна уу Энэ алхам
- Нэмж хэлэхэд, цагны тохиргооноос APB1 таймерын цагийг 16 МГц болгож тохируулна уу. Энэ алхам
Одоо энэ алхамын талаар жаахан ярилцъя.
Манай APB1 таймер цагийн давтамж нь 16 МГц юм. Тиймээс, 1 секунд авахын тулд 16,000, 000 хачиг шаардлагатай болно гэсэн үг юм. Гэсэн хэдий ч, бид prescaler -ийг 160 гэж тохируулсан. Энэ нь бидний давтамжийг энэ тоонд хувааж, хачигны тоог 100 000 болгон бууруулсан гэсэн үг юм. Тиймээс 1 секундын турш бидэнд 100 000 хачиг хэрэгтэй болно. Гэсэн хэдий ч бидэнд өмнө нь хэлсэнчлэн 20mS ХБХ -ны хугацаа хэрэгтэй болно. Тиймээс энгийн математик дээр үндэслэн бидэнд 20mS -т 2000 хачиг хэрэгтэй болно. Тиймээс Counter Period -ийг 2000 гэж тохируулснаар бид ХОУХ -ны дохионы хугацааг 20mS гэж тодорхойлдог. Одоо бид 0.5mS -ээс 2.5mS хүртэл идэвхжүүлэх хугацааг тэмдэглэх хэрэгтэй. Энэ тэгшитгэлийг энгийн математикаас авах боломжтой бөгөөд энэ нь:
On_Time = (Tick_Number / 100). Энэ бол servo моторын өнцгийг өөрчилдөг on_time гэдгийг санаарай. Тиймээс, зургийн доор би энэ алхамыг тоймлон харуулав. Хэрэв танд асуулт байвал коммент хэсэгт бичээрэй, би аль болох хурдан хариулах болно.
Тооцооллын зураг
Эдгээр бүгдийг хийсний дараа код үүсгэнэ:)
Алхам 3: Keil UVision кодчилол
Тиймээс эхлээд юу хийхийг хүсч байгаагаа тодорхойлъё? Бид зэрэг хүлээн авах функцийг бичиж, үүнийг servo дээр бичихийг хүсч байна. Тэгэхээр, бид үүнийг яаж хийх вэ? Өмнө нь хэлсэнчлэн өнцгийг өөрчлөхийн тулд цагийг өөрчлөх хэрэгтэй. Бидний өнцөг [0, 180] болон хачигны тоо хоорондоо өөрчлөгддөг бөгөөд энэ нь цаг хугацааны хувьд [50, 250] хооронд хэлбэлздэг. Тиймээс, бид хачигны тооны дагуу өнцгийг харуулсан газрын зургийн функц хэрэгтэй болно. Жишээлбэл, 0 градус 50 хачиг, 180 градус 250 хачиг гэх мэт … Тиймээс зураглалын функцээ бичье.
int map (int st1, int fn1, int st2, int fn2, int утга) {буцах (1.0*(утга-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Энэ бол бидний зураглалын функц юм. Энэ нь хэрхэн үүссэнийг сонирхож байна уу? Дараа нь үүнийг уншаарай. Тиймээс, бид өөрсдийн хүрээ болон газрын зураг дээр байрлуулахыг хүсч буй үнэ цэнээ авдаг.
Одоо өнцгийг хүлээн зөвшөөрөх функцийг бичээд хачигны мужид харуулъя.
void servo_write (int өнцөг) {htim1. Instance-> CCR1 = газрын зураг (0, 180, 50, 250, өнцөг); }
Таны харж байгаагаар энэ код нь өнцгийг хүлээн зөвшөөрч, түүнийг хачигны тооны мужид харуулна. Дараа нь хачигны тоог CCR1 бүртгэлд өгдөг бөгөөд энэ нь цаг, өнцгийг хянадаг.
Гэсэн хэдий ч эдгээр бүх зүйлийг ажиллуулахын тулд бид эхлээд pwm -ийг эхлүүлдэг бөгөөд үүнийг зөвхөн кодын мөрөөр хийж болно:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Тиймээс, бид өнцгийг хүлээн авч, servo дээр бичдэг функцтэй. Үүнийг туршиж үзээд маш хялбархан цэвэрлэх функцээ бичье.
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Тиймээс, энэ нь 180 хүртэл, дараа нь 0 хүртэл тоолж, эдгээр утгуудыг servo дээр бичнэ үү:) Үр дүнг нь харцгаая!
Алхам 4: Үр дүн:)
Тиймээс энэ бол төгсгөл юм. Хэрэв танд ямар нэгэн асуулт байвал асуугаарай. Тэдэнд хариулахын тулд би баяртай байх болно. Уншсанд маш их баярлалаа, дараагийн төсөл дээр уулзана гэж найдаж байна:)
Зөвлөмж болгож буй:
Elegoo Uno R3 Super Start Kit бүхий хөгжилтэй төслүүд - DC моторын джойстик хяналт: 4 алхам
Elegoo Uno R3 Super Start Kit - DC Motor -ийн Joystick Control бүхий хөгжилтэй төслүүд: Энэхүү зааварчилгаанд би Arduino -ийн тусламжтайгаар джойстик ашиглан DC моторын чиглэл, хурдыг хянахыг хичээх болно. Elegoo Uno R3 Super Start Kit -ийг Amazon.com дээрээс авах боломжтой
Arduino заавар - Жойстик бүхий Servo моторын хяналт: 4 алхам
Arduino заавар - Жойстик бүхий Servo моторын хяналт: Энэ хичээлээр бид Joystick -тэй servo хэрхэн ашиглах талаар сурах болно. Бид 1 джойстик ашиглан 1 ширхэг servo моторыг удирдах болно. Та энэхүү гарын авлагад үндэслэн робот гарны төслөө хэрэгжүүлэх боломжтой. Мэдээжийн хэрэг бид үүнийг хийхдээ гадны батерей / хүчийг ашиглах болно
Arduino заавар - Потенциометрийн тусламжтайгаар servo моторын хяналт: 5 алхам
Arduino заавар - Потенциометрийн тусламжтайгаар servo моторын хяналт: Энэхүү зааварчилгаа нь миний " Arduino: потенциометрээр серво моторыг хэрхэн удирдах вэ " Саяхан миний байршуулсан YouTube видео. Үүнийг үзэхийг танд зөвлөж байна. YouTube сувгаар зочлоорой
Arduino заавар - Arduino -той Servo моторын хяналт: 5 алхам
Arduino заавар - Arduino -той Servo моторын хяналт: Энэхүү заавар нь миний " Arduino: Arduino -той Servo моторыг хэрхэн удирдах вэ " Саяхан миний байршуулсан YouTube видео. Үүнийг үзэхийг танд зөвлөж байна. YouTube сувгаар зочлоорой
PID алгоритмыг ашиглан DC моторын хурдыг хянах (STM32F4): 8 алхам (зурагтай)
PID алгоритмыг ашиглан DC моторын хурдны хяналт (STM32F4): бүгдээрээ сайн байна уу, энэ бол өөр төсөлтэй холбоотой юм. Энэ удаад STM32F407 гэж MC байна. Энэ бол семестрийн дунд төслийн төгсгөл юм. Танд таалагдсан гэж найдаж байна. Энэ нь маш олон ойлголт, онол шаарддаг тул бид эхлээд үүнд хамрагдах болно. Компьютер гарч ирснээр