当前位置: 首页 > wzjs >正文

做网站真的可以赚的钱吗2345网址导航是病毒吗

做网站真的可以赚的钱吗,2345网址导航是病毒吗,网站排名优化化快排优化,wordpress后台加载慢今天简单实现一下,智能小车的运动模块程序. 实现小车的前进,后退,转向,就是通过电机IO口输出PWM,控制电机转速,实现上述功能. 主函数 #include "stm32f10x.h" // Device hea…

今天简单实现一下,智能小车的运动模块程序.

实现小车的前进,后退,转向,就是通过电机IO口输出PWM,控制电机转速,实现上述功能.

主函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "car.h"
#include "Key.h"uint8_t i;int main(void)
{
robot_Init();    // 机器人初始化
Key_Init();      // 按键初始化while (1){
if(Key_GetNum() == 1){makerobo_run(70,5000);//前进1Smakerobo_brake(500);//停止0.5Smakerobo_back(70,5000); //后退1s}}
}

key.c函数详解

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Key_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}uint8_t Key_GetNum(void)
{
uint8_t KeyNum = 0;
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0){
Delay_ms(20);
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0);
Delay_ms(20);KeyNum = 1;}
return KeyNum;
}

首先将PA15初始化为上拉输入模式

按键的逻辑:

  • 你只有在:“检测到按下 → 消抖 → 等待松开 → 再次消抖”完成之后,才会返回 1
  • 如果你一直按住按键,这个函数的 while 会阻塞,直到你松开才结束。

PWM.函数详解

#include "stm32f10x.h"                  // Device headervoid PWM_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;//使能定时器TIM4时钟,注意TIM4时钟为APB1RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能PWM输出GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//定时器TIM4的PWM输出通道1,TIM4_CH1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//定时器TIM4的PWM输出通道2,TIM4_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//定时器TIM4的PWM输出通道3,TIM4_CH3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//定时器TIM4的PWM输出通道4,TIM4_CH4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOTIM_TimeBaseStructure.TIM_Period = 100 - 1;//arr;//自动重装值TIM_TimeBaseStructure.TIM_Prescaler =36 - 1;//psc; //时钟预分频数TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化TIM4//初始化TIM4_CH1的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//??PWM??1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//??????TIM_OCInitStructure.TIM_Pulse = 0; //TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//??????TIM_OC1Init(TIM4, &TIM_OCInitStructure);//???TIM4_CH1//初始化TIM4_CH2的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM4_CH2初始化,OC2TIM_OC2Init(TIM4, &TIM_OCInitStructure);//初始化TIM4_CH3的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC3Init(TIM4, &TIM_OCInitStructure);//初始化TIM4_CH4的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC4Init(TIM4, &TIM_OCInitStructure);//使能4个通道的预装载寄存器TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);//OC1TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);//OC2TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);//OC3TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);//OC4TIM_ARRPreloadConfig(TIM4, ENABLE); //使能重装寄存器TIM_Cmd(TIM4, ENABLE);//使能定时器TIM4,准备工作 
}

这段代码是 STM32 上使用 定时器 TIM4 产生 四路 PWM 信号 的完整初始化过程。用于控制四个电机通道

分段详解

① 开启时钟


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);       // 开启 TIM4 时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);      // 开启 GPIOB 时钟
  • TIM4 属于 APB1 总线外设,需要使能其时钟。
  • GPIOB 属于 APB2 总线外设,也要开启时钟。

② 初始化 GPIO:PB6~PB9 为复用推挽输出


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用功能推挽输出(用于 PWM)GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // I/O 速度选择为 50MHz

然后四次初始化:

  • GPIO_Pin_6:对应 TIM4_CH1
  • GPIO_Pin_7:对应 TIM4_CH2
  • GPIO_Pin_8:对应 TIM4_CH3
  • GPIO_Pin_9:对应 TIM4_CH4

🧠 PWM 信号必须由“复用功能引脚”输出。


③ 配置定时器基本参数(频率、模式)

TIM_TimeBaseStructure.TIM_Period = 100 - 1;//arr;//自动重装值
TIM_TimeBaseStructure.TIM_Prescaler =36 - 1;//psc; //时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化TIM4

计数频率计算公式:

PWM计数频率 = 主频 / (PSC + 1) = 72MHz / 36 = 2MHz
PWM输出频率 = 计数频率 / (ARR + 1) = 2MHz / 100 = 20KHz

即:输出一个周期为 20KHz 的 PWM 波形,占空比由后面设置的 CCR 值决定。


④ 配置每个通道的 PWM 模式(4次)


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;       // PWM 模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能TIM_OCInitStructure.TIM_Pulse = 0;                       // 初始脉宽占空比 = 0%TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   // 高电平有效

然后依次配置:

  • TIM_OC1Init(TIM4, &TIM_OCInitStructure);:CH1(PB6)
  • TIM_OC2Init(...):CH2(PB7)
  • TIM_OC3Init(...):CH3(PB8)
  • TIM_OC4Init(...):CH4(PB9)

⑤ 使能预装载寄存器(可动态更新 PWM)


TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM4, ENABLE);  // 使能自动重装载寄存器

预装载作用:

  • 修改 PWM 占空比不会立刻生效,而是到下一个计数周期才会更新,防止中间跳变问题

⑥ 启动定时器


TIM_Cmd(TIM4, ENABLE);

TIM4 开始工作,四路 PWM 信号就开始输出了!

智能小车的运动控制函数

就是控制智能小车的四个电机通道的PWM,控制小车的前进,转向,后退

#include "stm32f10x.h"                  // Device header
#include "PWM.h"
#include "Delay.h"
// 机器人初始化
void robot_Init(void)
{PWM_Init(); 
}//四路PWM控制速度调节
void robot_speed(uint8_t left1_speed,uint8_t left2_speed,uint8_t right1_speed,uint8_t right2_speed)
{	TIM_SetCompare1(TIM4,left1_speed);TIM_SetCompare2(TIM4,left2_speed);TIM_SetCompare3(TIM4,right1_speed);TIM_SetCompare4(TIM4,right2_speed);
}// 基本的运动函数
// 机器人前进
void makerobo_run(int8_t speed,uint16_t time)  //前进函数
{if(speed > 100){speed = 100;}if(speed < 0){speed = 0;}robot_speed(speed,0,speed,0);Delay_ms(time);                 // 时间为毫秒robot_speed(0,0,0,0);           // 机器人停止}void makerobo_brake(uint16_t time) //刹车函数
{
robot_speed(0,0,0,0);     // 电机停止 
Delay_ms(time);          // 时间为毫秒   
}void makerobo_Left(int8_t speed,uint16_t time) //左转函数
{if(speed > 100){speed = 100;}
if(speed < 0){speed = 0;}robot_speed(0,0,speed,0);Delay_ms(time);                 //时间为毫秒  robot_speed(0,0,0,0);           // 机器人停止}void makerobo_Spin_Left(int8_t speed,uint16_t time) //左旋转函数
{if(speed > 100){speed = 100;}if(speed < 0){speed = 0;}  robot_speed(0,speed,speed,0);Delay_ms(time);                    //时间为毫秒 robot_speed(0,0,0,0);           // 机器人停止			
}void makerobo_Right(int8_t speed,uint16_t time) //右转函数
{if(speed > 100){speed = 100;}if(speed < 0){speed = 0;}robot_speed(speed,0,0,0);Delay_ms(time);                 //时间为毫秒  robot_speed(0,0,0,0);           // 机器人停止}void makerobo_Spin_Right(int8_t speed,uint16_t time) //右旋转函数
{if(speed > 100){speed = 100;}if(speed < 0){speed = 0;}  robot_speed(speed,0,0,speed);Delay_ms(time);                    //时间为毫秒 robot_speed(0,0,0,0);           // 机器人停止			
}void makerobo_back(int8_t speed,uint16_t time)  //后退函数
{if(speed > 100){speed = 100;}if(speed < 0){speed = 0;}robot_speed(0,speed,0,speed);Delay_ms(time);                 // 时间为毫秒robot_speed(0,0,0,0);           // 机器人停止}

分段详解

一、初始化函数

void robot_Init(void)

PWM_Init();   
// 调用 PWM 初始化函数(定义在 PWM.c 中)

作用:配置好 TIM4 输出四路 PWM,控制机器人四个电机的速度。


二、电机速度设置函数

robot_speed(uint8_t left1_speed,uint8_t left2_speed,uint8_t right1_speed,uint8_t right2_speed)TIM_SetCompare1(TIM4,left1_speed);   // 设置PWM通道1输出占空比TIM_SetCompare2(TIM4,left2_speed);   // 设置PWM通道2TIM_SetCompare3(TIM4,right1_speed);  // 设置PWM通道3TIM_SetCompare4(TIM4,right2_speed);  // 设置PWM通道4

控制四个电机的转动速度,分别为:

left1 左前

left2 左后

right1 右前

right2 右后


三、基本运动函数

makerobo_run(int8_t speed,uint16_t time)
—— 前进
robot_speed(speed,0, speed,0);// 左前电机和右前电机正转
Delay_ms(time);// 持续运动一段时间
robot_speed(0,0,0,0);// 停止运动


makerobo_back(int8_t speed,uint16_t time)
—— 后退
robot_speed(0, speed,0, speed);// 左后、右后电机正转,实现后退
Delay_ms(time);
robot_speed(0,0,0,0);


makerobo_Left(int8_t speed,uint16_t time)
—— 向左转弯
robot_speed(0,0, speed,0);// 仅右前电机动,车向左偏转
Delay_ms(time);
robot_speed(0,0,0,0);


makerobo_Right(int8_t speed,uint16_t time)
—— 向右转弯
robot_speed(speed,0,0,0);// 仅左前电机动,车向右偏转
Delay_ms(time);robot_speed(0,0,0,0);


四、原地旋转函数

makerobo_Spin_Left(int8_t speed,uint16_t time) —— 原地左旋转
robot_speed(0, speed, speed,0);// 左后电机反转(速度为正,装反电源),右前电机正转
// 实现两边相反转动,原地逆时针旋转
Delay_ms(time);
robot_speed(0,0,0,0);


makerobo_Spin_Right(int8_t speed, uint16_t time) —— 原地右旋转
robot_speed(speed,0,0, speed);// 左前、右后电机正转,原地顺时针旋转
Delay_ms(time);
robot_speed(0,0,0,0);


五、刹车函数

makerobo_brake(uint16_t time)
robot_speed(0, 0, 0, 0); 
// 所有电机停止
Delay_ms(time);          
// 刹车等待时间

http://www.dtcms.com/wzjs/513100.html

相关文章:

  • 动态网站开发架构国外seo网站
  • wordpress mail函数seo在线排名优化
  • 什么用来编写网页优化建议
  • 网站上的滚动图怎么做的建设企业营销型网站
  • 网站建设实物实训目的网站运营师
  • 阿里云1M做网站千锋教育和达内哪个好
  • 西安网站建设公司都有哪些南宁百度推广排名优化
  • 饮料网站建设市场分析南宁seo营销推广
  • 忻州市建设厅网站首页自动化测试培训机构哪个好
  • javase可以做网站吗百度站长工具app
  • 真人做网站郑州百度seo关键词
  • 高端品牌名字大全徐州关键词优化排名
  • 火车头wordpress 4.7小辉seo
  • 哪个网站可以做3d资源网
  • 余姚网站建设开发郑州互联网公司排名
  • 手机设计装修图的appseo是什么味
  • 网站建设运营外包百度账户安全中心
  • 如何查找网站备案百度推广搜索排名
  • 手机网站和电脑网站一样吗怎么制作网站教程手机
  • 网站建设赚钱吗网站怎么快速排名
  • 公司黄页是什么东西广州seo学徒
  • 老河口做网站东莞做网站的公司吗
  • 买好域名之后怎么做网站百度联盟官网
  • 厦门公司网站建设近三天新闻50字左右
  • 广州越秀区网站建设软文代发代理
  • 网站外链平台中国今天刚刚发生的新闻
  • 网站设计目的与规划深圳网络推广
  • 怎么制作网站模版互动网站建设
  • 建个站真的是免费的吗厦门seo网络优化公司
  • 广东两学一做考学网站nba最新消息交易情况