标题:
STM32 PWM驱动寻迹小车程序
[打印本页]
作者:
程111111
时间:
2019-10-15 11:17
标题:
STM32 PWM驱动寻迹小车程序
本实验是用PWM驱动寻迹小车,代码已经测试过了,写了好久,现在分享给大家。
单片机源程序如下:
#include "stm32f10x.h" //官方库
#include "delay.h"
#include "sys.h"
#include "motor.h"
#include "led.h"
#include "stdio.h"
#include "hw.h"
#include "key.h"
#include "timer.h"
int main(void)
{
u8 key;
delay_init(72);
LED_config();
KEY_Init();
hw_init();
Motor_Init();
// TIM4_Int_Init(4999,7199);
PWM_Init(899,0);
while(1)
{
key=KEY_Scan(0); //得到键值
if(key==KEY1_PRES){
LED0=0;
xunji();
}
// carStraight(400,400);
}
}
复制代码
#include "motor.h"
#include "hw.h"
#include "delay.h"
#include "timer.h"
void Motor_Init(void)
{
RCC->APB2ENR|=1<<2; //PORTA时钟使能
GPIOA->CRH&=0XFFF00FFF; //PORTA11 12 4 5推挽输出
GPIOA->CRH|=0X00033000; //PORTA11 12 4 5推挽输出
GPIOA->ODR |= 1<<11;
GPIOA->ODR |= 1<<12;
GPIOA->CRL&=0XFF00FFFF; //PORTA11 12 4 5推挽输出
GPIOA->CRL|=0X00330000; //PORTA11 12 4 5推挽输出
GPIOA->ODR |= 1<<4;
GPIOA->ODR |= 1<<5;
}
void carStraight(u16 leftPWM, u16 rightPWM)
{
setPWM(leftPWM,rightPWM);
LEFT_1 = 1;
LEFT_2 = 0;
RIGHT_1 = 1;
RIGHT_2 = 0;
}
void carLeft(u16 leftPWM, u16 rightPWM){
setPWM(leftPWM,rightPWM);
LEFT_1 = 0;
LEFT_2 = 1;
RIGHT_1 = 1;
RIGHT_2 = 0;
}
void carRight(u16 leftPWM, u16 rightPWM){
setPWM(leftPWM,rightPWM);
LEFT_1 = 1;
LEFT_2 = 0;
RIGHT_1 = 0;
RIGHT_2 = 1;
}
void carBack(u16 leftPWM, u16 rightPWM){
setPWM(leftPWM,rightPWM);
LEFT_1 = 0;
LEFT_2 = 1;
RIGHT_1 = 0;
RIGHT_2 = 1;
}
void carStop(){
LEFT_1 = 1;
LEFT_2 = 1;
RIGHT_1 = 1;
RIGHT_2 = 1;
}
void zuoxuan (u16 leftPWM, u16 rightPWM)
{setPWM(leftPWM,rightPWM);
LEFT_1 = 1;
LEFT_2 = 0;
RIGHT_1 = 1;
RIGHT_2 = 1;
delay_ms(80);
carStop();
}
void xunji()
{
while(1){
if(LEFT_FIND == 0)
{
carStraight(0,0);
}
else
{
zuoxuan(0,899); }
}
}
//||(RIGHT_FIND == 1 &&MIDDLE_FIND==1 &&LEFT_FIND == 1)
复制代码
所有资料51hei提供下载:
小车 - PWM -2.7z
(177.86 KB, 下载次数: 34)
2019-10-15 15:54 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-10-15 15:55
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1