TA的每日心情 | 擦汗 2024-9-30 02:33 |
---|
签到天数: 444 天 连续签到: 1 天 [LV.9]以坛为家II
|
今天下午在实验室朋友的催促下,我开始了wifi控制舵机的研究。
首先是研究舵机,还记得我曾在帖子中说到过 我的舵机模块 从小侄子的遥控飞机上拆下来的 网上查了下舵机的工作原理 它有3根引出线,电源、地,信号线 信号为PWM信号 大致意思是 给不同的PWM占空比,舵机会调整到一个固定的角度,然后保持不变,如果外部有扰动,舵机(伺服电机)就会立刻反应消除扰动造成的角度偏移,恢复之前的角度状态。
我现在变得很好奇,为啥会这样子神奇呢?! 怀着一颗强烈的好奇心,就动手拆开了舵机
发现,原来舵机(伺服电机)内部用的还是直流电机 ,但是它里面额外用了一些电路,一通电时,直流电机就会不停的转,当输入的脉冲信号(PWM)变化时,它的齿轮组就会转到了 当外部力促使主轴转动时,(主轴上大致连了一个可调电容),相当于改变了可调电容的容值,然后电路就会检测到,立刻就会做出控制动作,使容值恢复原来的值,也就相当于控制主轴恢复到之前的角度位置。
当然,最重要的实验就是wifi控制舵机的程序啦,哈哈 这个我也实验成功了,可惜一时欣喜,忘记录制视频了,以后再补上,现在贴出代码先
#include <asf.h>
#define USART_SERIAL_BAUDRATE 115200
#define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc
#define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc
#define USART_SERIAL_STOP_BIT true
int main (void)
{
board_init();
sysclk_init();//调用ASF框架函数初始化时钟
delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务
struct pwm_config pwm_cfg;
pwm_init(&pwm_cfg,PWM_TCE0, PWM_CH_A, 500); //配置的PWM输出口为PE0
static usart_rs232_options_t USART_SERIAL_OPTIONS = {
.baudrate = USART_SERIAL_BAUDRATE,
.charlength = USART_SERIAL_CHAR_LENGTH,
.paritytype = USART_SERIAL_PARITY,
.stopbits = USART_SERIAL_STOP_BIT };
sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART module
usart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:
uint8_t received_byte;//A variable for the received byte must be added:
while(1)
{
received_byte = usart_getchar(&USARTE0);//Wait for reception of a character:
// usart_putchar(&USARTE0, received_byte);//Echo the character back:
switch( received_byte )
{
case a: pwm_start(& pwm_cfg,20); break; //20%占空比
case b: pwm_start(& pwm_cfg,50); break; //50%占空比
case c: pwm_start(& pwm_cfg,80); break; //80%占空比
}
}
}
总结: 舵机的具体参数还没测试完好,即调整百分之多少的占空比对应的输出角度是多少 这个还有待进一步的验证。
|
|