Atmega2560 舵机PWM控制

本文介绍了使用Atmega2560芯片,基于16MHz晶振的Freenove_Carwling_Robot项目中,如何利用16位的定时器1、3、4、5通过软件中断实现对12个舵机的PWM控制,以达到精确调节舵机转动角度的目的。
摘要由CSDN通过智能技术生成

Atmega2560 舵机PWM控制

舵机Servo 示意图
在这里插入图片描述
舵机控制原理
在这里插入图片描述
使用芯片:Atmega 2560
晶振: 16MHz
产品: freenove_Carwling_Robot
目标:用16位的四个定时器1,3,4,5分别产生PWM控制12个舵机。由于舵机的控制并不是PWM的硬件连接,所以这里要使用软件中断来控制
在这里插入图片描述
在这里插入图片描述
程序:

#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU   16000000UL
#include <util/delay.h>
// ********************************************************************************
// Interrupt Routines
// ********************************************************************************
#define scale 180

#define RF_wrist_def 170*182  
#define RF_elbow_def 110*182 //minus up
#define RF_shoulder_def 127*182

#define LF_wrist_def 100*182 // inc dn
#define LF_elbow_def 150*182 //inc up
#define LF_shoulder_def 130*182 //inc cw

#define RR_wrist_def 170*182
#define RR_elbow_def 110*182
#define RR_shoulder_def 90*182

void timer_init(void) {
    // timer1 init
	TIMSK1= (1<<TOIE1) | (1<<OCIE1A) | (1<<OCIE1B) | (1<<OCIE1C);
	TCCR1B |= (1 << CS10) ;// turn on 16 bit timer1 also with /1024
	
	TIMSK3= (1<<TOIE3) | (1<<OCIE3A) | (1<<OCIE3B) | (1<<OCIE3C);
	TCCR3B |= (1 << CS30) ;// turn on 16 bit timer1 also with /1024
}

ISR(TIMER1_OVF_vect) {
    // timer1 overflow
	PORTA |= 0b00000111; 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值