
Мазмұны:
2025 Автор: John Day | day@howwhatproduce.com. Соңғы өзгертілген: 2025-01-23 14:51


Тағы да сәлем достар:) Сонымен, бұл жобада біз STM32F4 ARM MCU сервоприводты басқарамыз. Менің жағдайда, мен табу тақтасын қолданамын, бірақ егер сіз мәселенің мәнін түсінсеңіз, оны әр MCU үшін қолдануға болады. Сонымен бастайық:)
1 -қадам: Жабдық пен бағдарламалық қамтамасыз етуге қойылатын талаптар
Аппараттық құралдар бойынша бізге қажет:
- Менің жағдайда STM32f4 Discovery тақтасы бар MCU
- SG90 немесе кез келген басқа сияқты жалпы серво қозғалтқышы
Бағдарламалық қамтамасыз ету тұрғысынан бізге қажет:
- STM32CubeMX
- Keil uVision
Егер сізде осының бәрі болса, келесі қадамға өтіңіз:)
2 -қадам: STM32CubeMX конфигурациясы
Өздеріңіз білетіндей, серво қозғалтқышты басқару үшін бізге PWM сигналы қажет. PWM сигналына қойылатын талаптар келесідей:
- PWM кезеңі 20 мС болуы керек
- Уақыт 0,5 mS - 2,5 mS аралығында болуы керек. Уақыт 0,5 мС болғанда, серво 0 градусқа, 90 градус үшін 1,5 мС, 180 градус үшін 2,5 мС айналады.
Сонымен, біз PWM -ді конфигурациялауымыз керек және ол үшін Timer1 қолданамыз.
- Алдымен Таймер бөлімінен TIM1 таңдаңыз. Бұл қадам
-
Содан кейін Mode бөлімінен
- Ішкі сағатты таңдаңыз Бұл қадам
- PWM генерациясы CH1 Бұл қадам
-
Содан кейін конфигурация бөлімінен
- Prescaler параметрін 160 етіп орнатыңыз Бұл қадам
- Санау кезеңін 2000 деп орнатыңыз Бұл қадам
- Импульсті 50 -ге орнатыңыз Бұл қадам
- Сонымен қатар, Сағат конфигурациясынан APB1 таймері 16 МГц сағатты орнатады. Бұл қадам
Енді осы қадам туралы біраз сөйлесейік:
Біздің APB1 таймерінің жиілігі 16 МГц. Демек, 1 секундқа жету үшін 16 000 000 кене қажет. Дегенмен, біз алдын ала есептегішті 160 -қа қойдық. Демек, біз жиілікті осы санға бөліп, кенелердің санын 100 000 -ға дейін азайттық. Демек, 1 секундқа бізге 100 000 кене қажет. Алайда, бізге бұрын айтылғандай, 20 мЗ PWM кезеңі қажет. Сонымен, қарапайым математикаға сүйене отырып, бізге 20mS үшін 2000 кене қажет. Осылайша, Counter Period -ды 2000 -ге орнату арқылы біз PWM сигналының периодын анықтаймыз, ол 20mS. Енді біз 0.5mS -ден 2.5mS -ге дейін қосылу уақытын алу үшін белгі санын анықтауымыз керек. Біз бұл теңдеуді қарапайым математикадан аламыз және ол:
On_Time = (Tick_Number / 100). Бұл servo қозғалтқыштың бұрышын өзгертетін on_time екенін есте сақтаңыз. Сонымен, төмендегі суретте мен бұл қадамды қорытындылаймын. Егер сізде сұрақтар туындаса, түсініктемелерде жазыңыз, мен мүмкіндігінше тез жауап беремін.
Есептеулер суреті
Осының бәрін жасағаннан кейін кодты жасаңыз:)
3 -қадам: Keil UVision кодтау
Сонымен, алдымен не істегіміз келетінін анықтайық? Біз дәрежені қабылдайтын функцияны жазуды және оны сервоға жазуды қалаймыз. Сонымен, біз мұны қалай жасаймыз? Жоғарыда айтқанымыздай, бұрышты өзгерту үшін уақытты өзгерту керек. Біздің бұрыштар [0, 180] мен кенелердің саны арасында өзгереді, бұл уақыт бойынша [50, 250] арасында өзгереді. Сонымен, бізге кенелердің санына берілген бұрышты салыстыратын картаға түсіру функциясы қажет. Мысалы, 0 градустық 50 кенеге, 180 градусқа 250 кенеге және т.б. үшін … Сонымен, картографиялау функциясын жазайық:
int картасы (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);
Сонымен, бізде бұрышты қабылдайтын және оны сервоға жазатын функция бар. Оны сынап көрейік және біздің тазалау функциясын жазайық, бұл өте оңай:
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 -ге дейін төмендейді және осы мәндерді сервоға жазады:) Сонымен, нәтижені көрейік!
4 -қадам: Нәтиже:)
Сонымен, бұл соңы. Егер сізде қандай да бір сұрақ болса, сұраңыз. Мен оларға жауап беру үшін бақытты боламын. Оқығаныңыз үшін көп рахмет және келесі жобада кездесеміз деп үміттенемін:)
Ұсынылған:
Arduino бірнеше сервоқозғалтқышты қалай қосуға болады - PCA9685 оқулығы: 6 қадам

Arduino бірнеше сервоқозғалтқышты қалай қосуға болады - PCA9685 оқулығы: Бұл оқулықта біз PCA9685 модулі мен arduino көмегімен бірнеше серво қозғалтқыштарын қалай қосуға болатынын білеміз.PCA9685 модулі бірнеше қозғалтқышты қосу қажет болған жағдайда өте жақсы, мына жерден оқи аласыз https : //www.adafruit.com/product/815Ви қараңыз
ESP8266 RGB LED STRIP WIFI басқару - NODEMCU Wifi арқылы басқарылатын жарықдиодты жолақ үшін IR қашықтан басқару құралы ретінде - RGB LED STRIP смартфонды басқару: 4 қадам

ESP8266 RGB LED STRIP WIFI басқару | NODEMCU Wifi арқылы басқарылатын жарықдиодты жолақ үшін IR қашықтан басқару құралы ретінде | Смартфонды RGB LED STRIP басқару: Сәлеметсіздер ме, балалар, бұл оқулықта біз nodemcu немесе esp8266 -ды RGB жарықдиодты жолағын басқару үшін инфрақызыл қашықтан басқару құралы ретінде қолдануды үйренеміз, ал Nodemcu смартфон Wi -Fi арқылы басқарылады. Негізінде сіз RGB LED STRIP -ті смартфонмен басқара аласыз
Arduino оқулығы - потенциометрмен сервоқозғалтқышты басқару: 5 қадам

Arduino оқулығы - потенциометрмен сервоқозғалтқышты басқару: Бұл нұсқаулық менің «Arduino: потенциометрмен сервоприводты қалай басқаруға болады» жазбасының нұсқасы болып табылады. Мен жақында жүктеген YouTube бейнесі. Мен сізге оны тексеруге кеңес беремін. YouTube каналына кіріңіз
Arduino оқулығы - Arduino көмегімен сервоқозғалтқышты басқару: 5 қадам

Arduino оқулығы - Arduino көмегімен сервоқозғалтқышты басқару: Бұл нұсқаулық менің «Arduino: Arduino көмегімен серво -моторды қалай басқаруға болады» жазбаша нұсқасы болып табылады. Мен жақында жүктеген YouTube бейнесі. Мен сізге оны тексеруге кеңес беремін. YouTube каналына кіріңіз
PID алгоритмі (STM32F4) көмегімен тұрақты ток қозғалтқышының жылдамдығын басқару: 8 қадам (суреттермен)

PID алгоритмін (STM32F4) қолдана отырып, тұрақты ток қозғалтқышының жылдамдығын бақылау: бәріне сәлем, бұл басқа жобамен бірге. Бұл жолы MC ретінде STM32F407. Бұл семестрдің ортасындағы жобаның соңы. Сізге бұл ұнайды деп үміттенемін, бұл көптеген тұжырымдамалар мен теорияны қажет етеді, сондықтан біз алдымен оған енеміз. Компьютерлер мен