Серво Цонтрол преко УСБ-а са САМ4С Ксплаинед Про

RADDS - Basics (Јули 2019).

$config[ads_text] not found
Anonim

Серво Цонтрол преко УСБ-а са САМ4С Ксплаинед Про


Први део у овој серији две фазе се фокусира на хардверску поставку и на употребу пулзно-модулисаног сигнала за контролу серво-уређаја.

Подршка информације

  • Увод у развој пројеката са Атмел САМ4С Ксплаинед Про
  • Модулација ширине импулса
  • Претворите ПВМ у ДАЦ
  • Лов-Пасс Филтрирај сигнал ПВМ у аналогни напон
  • Пулсе-Видтх Модулатион са САМ4С Ксплаинед Про

Потребан хардвер / софтвер

  • САМ4С Ксплаинед Про евалуацијски комплет
  • ПРОТО1 Ксплаинед Про продужна табла (није стриктно неопходна, али веома корисна)
  • Атмел Студио
  • ТоверПро СГ92Р серво (или било који еквивалентни серво)
  • АЦ / ДЦ зидни монтажни трансформатор, 5 В (или било који други напон од 5 В са одговарајућим струјним капацитетом)
  • 2 жичане жице за прикључак за прикључак
  • 1 жичана жица за плуг-то-плуг

Још једна апликација ПВМ

Ако погледате чланке наведене у одељку "Подршка информација", приметићете да сам недавно покрио прилично мало информација о коришћењу импулсе-ширине модулираног сигнала (помоћу нископропусног филтера) као јефтиног дигитално- то-аналогни претварач. У процесу истраживања ове теме показао сам како генерирати ПВМ сигнале са САМ4С Ксплаинед Про развојном платформом. Уз све ово пословање ПВМ свеже у нашим мислима, мислим да је смисла погледати другу стандардну апликацију за ПВМ сигнале: серво контролу.

Као што вероватно знате, термин "серво" (кратак за сервомотор) обично се односи на ротациони погон контролисан са ПВМ-ом који користи повратну информацију да прецизно контролише угловну позицију своје излазне осовине. Ширина импулса контролног сигнала одговара угаоној позицији, а мотор аутоматски ротира своју осовину до одговарајуће позиције на основу тренутне ширине импулса; то је једноставан и ефикасан аранжман. Типични "сервиси за хоби" усвајају стандардну шему контроле у ​​којој импулс од 1 мс одговара екстремно-лијевој позицији, 1, 5мс одговара центру, а 2мс одговара екстремном десном углу. (Ускоро ћете видети да су ове вриједности "смјернице", можда ће бити потребна одређена прилагођавања.)

Серво спецификације-или недостатак тога

Серво који ћу користити за овај пројекат је ТоверПро СГ92Р. Диги-Кеи-ова страница производа за СГ92Р вас упућује на "технички лист" који мора бити један од најинформативнијих техничких докумената које сам икада прочитао. То је велики број две странице, први који се састоји искључиво од фотографије. Једини део чврстих информација је да серво може да ротира 180 °. Такође се помиње стандардна веза импулса-ширина-положај, која се (бар за мој серво) показала као веома нетачна. Нема струје или напона спецификација, нема обртног момента, нема ширине мртвих појасева, нема препорука за ПВМ фреквенцију, а најгоре од свега нема пиноут-а. Датасхеет говори прилично мало о коришћењу серво-а у вези са Ардуино хардверским информацијама које су за мене потпуно бескорисне, јер немам власника и никада нисам користио било који Ардуино производ.

На срећу, пружићу вам неопходне информације, тако да можете прескочити табеларну листу. Називни напон напајања је 5 В, и могу да потврдим да 5 В ради јер је то оно што ја користим. Једна интернет страница тврди да је прихватљиви опсег од 3 В до 7.2 В. Могуће је и да потврдите да можете успјешно управљати контролним сигналом са 3.3 В логиком, чак и када је напон напајања 5 В. Нисам мерио струју, серво ради фино са трансформатором од 5 В, 1 А. Тема серво-контролне ПВМ фреквенције је мало компликована, тако да ћу заобићи детаље; довољно је рећи да је добар избор негде у распону од 40 до 60 Хз. У овом пројекту користићемо 50 Хз. На крају, овде је и пиноут:

Имајте на уму да користимо "ЦДЦ" верзију УСБ модула. Ово значи "класа уређаја за комуникацију", која је генеричка класа која се може користити у свакој ситуацији у којој је потребна основна серијска комуникација. АСФ-ов ЦДЦ модул чини изненађујуће лако успоставити виртуелну везу са ЦОМ портом са ПЦ-ом, а виртуална веза ЦОМ портова је само оно што нам је потребно - једноставан интерфејс који нам омогућава комуникацију са рачунаром помоћу стандардног терминала или било ког другог програм који укључује функцију серијског порта. Ми ћемо покрити УСБ део овог пројекта у следећем чланку.

Ево шифре који ћемо користити да потврдимо да можемо правилно контролисати серво.

 #include#define PWM0H_SERVO IOPORT_CREATE_PIN(PIOA, 23) #define PWM_CLOCKSOURCE_FREQ 1000000 #define PWM_FREQ 50 #define PWM_PERIOD_TICKS PWM_CLOCKSOURCE_FREQ/PWM_FREQ #define PULSE_WIDTH_FULL_LEFT_TICKS 1000 #define PULSE_WIDTH_CENTER_TICKS 1500 #define PULSE_WIDTH_FULL_RIGHT_TICKS 2000 pwm_channel_t PWM0_config; int main (void) { //clock configuration and initialization sysclk_init(); /*Disable the watchdog timer and configure/initialize port pins connected to various components incorporated into the SAM4S Xplained development platform, eg, the NAND flash, the OLED interface, the LEDs, the SW0 pushbutton.*/ board_init(); //connect peripheral B to pin A23 pio_configure_pin(PWM0H_SERVO, PIO_TYPE_PIO_PERIPH_B); //enable the peripheral clock for the PWM hardware pmc_enable_periph_clk(ID_PWM); //disable the PWM channel until it is properly configured pwm_channel_disable(PWM, PWM_CHANNEL_0); //PWM clock configuration pwm_clock_t PWM_clock_config = { .ul_clka = PWM_CLOCKSOURCE_FREQ, .ul_clkb = 0, .ul_mck = sysclk_get_cpu_hz() }; //apply the clock configuration pwm_init(PWM, &PWM_clock_config); //select channel 0 PWM0_config.channel = PWM_CHANNEL_0; //select clock A PWM0_config.ul_prescaler = PWM_CMR_CPRE_CLKA; //active state is logic high PWM0_config.polarity = PWM_HIGH; //left-aligned mode PWM0_config.alignment = PWM_ALIGN_LEFT; PWM0_config.ul_period = PWM_PERIOD_TICKS; PWM0_config.ul_duty = PULSE_WIDTH_CENTER_TICKS; //apply the channel configuration pwm_channel_init(PWM, &PWM0_config); //configuration is complete, so enable the channel pwm_channel_enable(PWM, PWM_CHANNEL_0); while(1) { delay_ms(1000); pwm_channel_update_duty(PWM, &PWM0_config, PULSE_WIDTH_FULL_LEFT_TICKS); delay_ms(1000); pwm_channel_update_duty(PWM, &PWM0_config, PULSE_WIDTH_FULL_RIGHT_TICKS); delay_ms(1000); pwm_channel_update_duty(PWM, &PWM0_config, PULSE_WIDTH_CENTER_TICKS); } } 

Коментари и дескриптивни идентификатори требају вам омогућити да разумете шта се дешава у коду. Међутим, ако сте збуњени због нечега што се тиче ПВМ функционалности или порт-пин конфигурације, погледајте модулацију Пулсе-Видтх Модуле помоћу САМ4С Ксплаинед Про за више информација.

Конфигурацију ПВМ времена регулишу шест дефиниција препроцора близу почетка кода:

 #define PWM_CLOCKSOURCE_FREQ 1000000 #define PWM_FREQ 50 #define PWM_PERIOD_TICKS PWM_CLOCKSOURCE_FREQ/PWM_FREQ #define PULSE_WIDTH_FULL_LEFT_TICKS 1000 #define PULSE_WIDTH_CENTER_TICKS 1500 #define PULSE_WIDTH_FULL_RIGHT_TICKS 2000 

Сат који управља ПВМ хардвером је подешен на 1 МХз. Период ПВМ и ширина импулса су дефинисани у јединицама клека сата, тако да све вриједности које уносимо у период и регистре ширине импулса одговарају трајању у микросекундама. Приказане вредности одговарају номиналним ширинама импулса за екстремно лево, средишње и екстремно десно положаје вратила: 1000 часовника за 1 мс, 1500 часовника за 1, 5 мс и 2000 часовника за 2 мс. Бесконачна петља на крају главне () функције циклусује кроз ове три позиције, уз следећа ажурирања регистра ширине импулса одвојених одлагањем од једне секунде. Следећи видео приказује резултате:

Као што видите, ротациони опсег вратила није ни близу 180 °; изгледа више као 90 °. Са малим пробним и грешком открио сам да следеће вредности производе очекивану ротацију од 180 °:

 #define PULSE_WIDTH_FULL_LEFT_TICKS 480 #define PULSE_WIDTH_CENTER_TICKS 1440 #define PULSE_WIDTH_FULL_RIGHT_TICKS 2350 

Можете да користите следећу линку да преузмете изворне и пројектне датотеке:

Изворни и пројектни фајлови

Закључак

Поставили смо хардвер и применили неки основни фирмваре-управљачки програм. Такође смо утврдили ширину импулса који стварно померају вратило на екстремно лево, центар и екстремно десно. У следећем чланку ћемо укључити УСБ функционалност тако да можемо контролисати серво са рачунара.

Следећи чланак у Серији: Серво контрола преко УСБ-а са САМ4С Ксплаинед Про, 2. део

Дајте овом пројекту покушај за себе! Узми БОМ.