Мазмуну:
- 1 -кадам: Аппараттык жана программалык камсыздоого талаптар
- 2 -кадам: STM32CubeMX конфигурациясы
- 3 -кадам: Keil UVision коддоо
- 4 -кадам: Жыйынтык:)
Video: STV32F4 ARM MCU менен Servo Motor Control: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Дагы салам достор:) Ошентип, бул долбоордо биз STM32F4 ARM MCU менен серво моторун башкарабыз. Менин учурда, мен ачылыш тактасын колдоном, бирок эгер сиз көйгөйдүн маңызын түшүнсөңүз, анда аны ар бир MCUга колдонсоңуз болот. Ошентип. баштайлы:)
1 -кадам: Аппараттык жана программалык камсыздоого талаптар
Аппараттык жактан бизге керек болот:
- Менин учурда STM32f4 Discovery тактасы болгон MCU
- SG90 же башка сыяктуу жалпы серво мотору
Программалык камсыздоо жагынан бизге керек болот:
- STM32CubeMX
- Keil uVision
Эгер мунун баары бар болсо, кийинки кадамга өтүңүз:)
2 -кадам: STM32CubeMX конфигурациясы
Белгилүү болгондой, servo моторун башкаруу үчүн бизге PWM сигналы керек. PWM сигналына карата талаптар мындай:
- PWM мезгили 20 mS болушу керек
- Убакыт 0,5 мСтен 2,5 мСке чейин болушу керек. Убакыт 0,5 мС болгондо, серво 0 градуска, 90 градус үчүн 1,5 мСке жана 180 градуска 2,5 мСке бурулат.
Ошентип, биз PWMди конфигурациялашыбыз керек жана бул үчүн биз Timer1ди колдонобуз.
- Биринчиден, Таймер бөлүмүнөн TIM1 тандаңыз. Бул кадам
-
Андан кийин, Mode бөлүмүнөн
- Ички саатты тандоо Бул кадам
- PWM Generation CH1 Бул кадам
-
Андан кийин, Конфигурация бөлүмүнөн
- Prescaler'ди 160ка коюңуз Бул кадам
- Эсептөө мезгилин 2000ге коюңуз Бул кадам
- Бул кадамды Pulse 50гө коюңуз
- Кошумча, Саат Конфигурациясынан APB1 Таймерин 16 МГцке коюңуз. Бул кадам
Эми бул кадам тууралуу бир аз сүйлөшөлү:
Биздин APB1 таймеринин жыштыгы 16 МГц. Демек, бул 1 секунд алуу үчүн 16 000 000 кене талап кылынат дегенди билдирет. Бирок, биз алдын ала эсептегичибизди 160 деп койдук. Демек, биз жыштыгыбызды ошол санга бөлүп, кенелердин санын 100 000ге чейин азайттык. Демек, 1 секундага 100 000 кене керек. Бирок, биз буга чейин айткандай, 20mS PWM мезгилине муктажбыз. Ошентип, жөнөкөй математиканын негизинде бизге 20mS үчүн 2000 кене керек. Ошентип, Counter Period 2000ди коюу менен биз PWM сигналынын мезгилин 20mS деп аныктайбыз. Эми биз 0.5mSден 2.5mSке чейин On убактысын алуу үчүн кененин санын аныкташыбыз керек. Биз бул теңдемени жөнөкөй математикадан ала алабыз жана ал:
On_Time = (Tick_Number / 100). Бул servo мотордун бурчун өзгөрткөн on_time экенин унутпаңыз. Ошентип, сүрөттүн астында мен бул кадамды жыйынтыктайм. Эгерде кандайдыр бир суроолоруңуз болсо, комментарийге жазыңыз, мен мүмкүн болушунча тезирээк жооп берем.
Эсептөөлөрдүн сүрөтү
Мунун баарын жасагандан кийин кодду жаратыңыз:)
3 -кадам: Keil UVision коддоо
Ошентип, келгиле, алгач эмне кылгыбыз келгенин аныктайлы? Биз каалайбыз, даражаны кабыл алган функцияны жазып, аны сервого жазгыңыз келет. Ошентип, биз муну кантип кылабыз? Жогоруда айткандай, бурчту өзгөртүү үчүн, убакытты өзгөртүү керек. Биздин бурчтарыбыз [0, 180] менен кенелерибиздин санынын ортосунда өзгөрөт, бул убакыттын өтүшү менен өзгөрөт [50, 250]. Ошентип, бизге кенелердин санына берилген бурчту картага түшүрүүчү функция керек. Мисалы, 0 даража 50 кене үчүн, 180 градус үчүн 250 кене жана башкалар үчүн … Ошентип, келгиле, биздин картографиялык функцияны жазалы:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1.0*(value-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Бул биздин картаны түзүү функциясы. Ал кантип пайда болгонуна кызыгасызбы? Анда муну окуңуз. Ошентип, биз диапазондорубузду жана картага түшүргүбүз келген маанини алабыз.
Эми, бурчту кабыл алуучу жана кенелер диапазонуна карта түзүүчү функцияны жазалы:
жараксыз 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 -кадам: Жыйынтык:)
Демек, бул аягы. Эгерде сизде кандайдыр бир суроо болсо, сураңыз. Мен аларга жооп берүү үчүн бактылуу болом. Окуганыңыз үчүн чоң рахмат жана кийинки долбоордо көрүшөм деп үмүттөнөм:)
Сунушталууда:
Cat Food Access Control (ESP8266 + Servo Motor + 3D Басып чыгаруу): 5 кадам (Сүрөттөр менен)
Мышыктардын азык -түлүккө жетүүсүн көзөмөлдөө (ESP8266 + Servo Motor + 3D басып чыгаруу): Бул долбоор мен карыя диабет мышыгы Чаз үчүн автоматташтырылган мышык тамак табагын жасоо процессин камтыйт. Көргүлө, ал инсулинди ала электе эртең мененки тамакты ичиши керек, бирок мен көбүнчө уктаар алдында анын тамагын алууну унутуп калам
Step Step Motor Башкаруучу Step Motor - Stepper Motor Ротари Encoder катары: 11 кадам (сүрөттөр менен)
Step Step Motor Башкаруучу Step Motor | Ротари коддогуч катары Stepper мотору: Бир нече тепкич мотору жатып алып, бир нерсе кылгысы келеби? Бул Нускамада Arduino микроконтроллерин колдонуп, башка тепкичтүү мотордун абалын көзөмөлдөө үчүн айланма коддогуч катары кадам моторун колдонолу. Андыктан, көпкө созулбастан, келели
Fpga Control RC Servo Motor Robot Arm - Digilent Contest: 3 Steps
Fpga Controled RC Servo Motor Robot Arm - Digilent Contest: FPGA башкарылган servo мотор робот колу Бул долбоордун максаты - тактада ширетүү операцияларын аткара турган программалоочу системаны түзүү. Система Digilent Basys3 өнүктүрүү тактасына негизделген жана ал биргелешип ширетүүгө жөндөмдүү болот
Arduino үйрөткүчү - Joystick менен Servo Motor Control: 4 кадам
Arduino үйрөткүчү - Joystick менен Servo Motor Control: Бул үйрөткүчтө биз Joystick менен servo колдонууну үйрөнөбүз. Биз 1 джойстик менен 1 даана servo моторду көзөмөлдөйбүз. Бул окуу куралына шилтеме берүү менен роботтук кол долбоорлоруңузду ишке ашырсаңыз болот. Албетте, биз тышкы батареяны / кубатты колдонобуз
Arduino үйрөткүчү - Arduino менен Servo Motor Control: 5 кадам
Arduino үйрөткүчү - Servo моторду Arduino менен башкаруу: Бул көрсөтмө менин " Arduino: Arduino менен Servo моторун кантип башкаруу керек " Мен жакында жүктөгөн YouTube видеосу. Мен аны текшерип чыгууну сунуштайм. YouTube каналына баш багыңыз