迪文科技论坛

 找回密码
 立即注册
搜索
查看: 71|回复: 0

【分享】2021级周羊 黄水午【分享】雨刮器功能实现

[复制链接]

1

主题

0

回帖

26

积分

新手上路

Rank: 1

积分
26
发表于 2024-9-11 11:28:32 | 显示全部楼层 |阅读模式
一、引言
  9g舵机是一种微型电动舵机,广泛应用于模型控制、机器人、摄像云台等领域。它由电机、减速机构、位置反馈装置和控制电路组成。舵机的内部电机能够将电能转换为机械能,通过减速机构传递给输出轴。位置反馈装置用于检测当前输出轴的位置,而控制电路则根据外部输入信号来控制电机的运行状态,实现对输出轴位置的精确控制。
作品简介
二、功能介绍
  可以通过滑动来控制扇叶的旋转来实现对雨刮器的控制。
三、硬件介绍
9g舵机是一种微型电动舵机,它由以下几个关键部分组成:
电机:舵机的核心部件,负责将电能转换为机械能。电机的转动产生的扭矩通过减速机构传递给输出轴。
减速机构:通过齿轮装置将电机的高速旋转转换为较低速度、更大扭矩的旋转,以便更好地控制舵机的运动。
位置反馈装置:通常是一个小型电位器或光电传感器,用于检测当前输出轴的位置。在舵机工作过程中,它可以实时感知输出轴的位置。
控制电路:包括放大器、比较器、反馈回路等部分,根据外部输入信号控制电机的运行状态。控制电路通过反馈机制来实现对输出轴位置的精确控制
四、代码设计
#include "sys.h"
#include "func_handler.h"
sbit PWM = P1^4;
xdata angle_1,angle_2;
xdata vate;
idata u32 cnt = 0;
idata u16 cnt_1 = 0;
idata u16 turn=1;
idata s16 PWM_count = 0;
#define T0_PERIOD_1MS                0xFF41
//#define T0_PERIOD_1MS                    0xFCA4                //11.1us的定时周期
#define ANGLE_WIN_NUM_VP                0x2000
#define VATE_WIN_NUM_VP                    0x2010
#define TURN_WIN_NUM_VP                    0x2070
//IO引脚初始化
void io_init()
{
PORTDRV = 0x02;//驱动电流为8mA
P1MDOUT |= 0xFF;//P1设置为输出
}
//定时器0初始化
void timer0_init()
{
//16位定时器工作模式
TMOD &= 0xFC;
TMOD |= 0x01;
//定时周期为   11.1 us
TH0 = (u8)(T0_PERIOD_1MS>>8);
TL0 = (u8)T0_PERIOD_1MS;
ET0 = 1;//使能定时器0中断
EA = 1;//使能总中断
TR0 = 1;//启动定时器0
}
//定时器0的中断服务程序
void timer0_isr()        interrupt 1
{               
        //重新装载周期值
TH0 = (u8)(T0_PERIOD_1MS>>8);
TL0 = (u8)T0_PERIOD_1MS;               
cnt++;                 //统计溢出的次数
if(cnt_1==5)
        {                        
cnt_1=0;
vate=angle_1-angle_2;angle_2=angle_1;
        }
//控制PWM        
if(cnt>=0&&cnt < 45.025){
PWM = 1;
        }                                                
if(cnt < PWM_count){
PWM = 1;
}else{
PWM = 0;               
        }
if(cnt == 1801){        //当溢出1801次,经过了20ms ,周期到了                                
cnt=0;
cnt_1++;
PWM = 1;
        }

}
void main(void)
{   
sys_init();//系统初始化
timer0_init();//定时器0初始化
io_init();//IO引脚初始化
sys_delay_ms(1);        
angle_1=0;
angle_2=0;
vate=0;
cnt = 0;
PWM = 1;//一开始从高电平开始
while(1)
        {              sys_read_vp(ANGLE_WIN_NUM_VP,(u8*)&angle_1,1);
PWM_count = (angle_1+90)*1.00056+45.025;
       sys_write_vp(VATE_WIN_NUM_VP,(u8*)&vate,1);

        }
}
五、接口连接
棕色线连接GND红色线连接VCC黄色线连接P1.4

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 06:36 , Processed in 0.073974 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表