新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2015-8-15
- 在线时间
- 17 小时
|

楼主 |
发表于 2016-10-8 18:38:02
|
显示全部楼层
//***********************************************************//
//***************************motor.c*************************//
//***********************************************************//
#include "sys.h"
#include "motor.h"
#include "sys_tick.h"
#include "usart.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "mystring.h"
#include "delay.h"
#define FW_Ratio 375 // 方位比例
s16 FW_Max_Speed = 240; // 0.1°/s
const s16 FW_Motor_Acc = 500;
volatile s32 old_fwspeed = 0;
void motorinit(void);
void Set_FWSpeed(s32 ispeed);
void Set_Channel_NVIC(u8 NVIC_Channel, u8 Priority);//设置中断
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
////********* 方位 孔子和 *************8
void Motor_Init(void)
{
GPIOB->CRH &= ~(((u32)(0xffff))<<16); //PB12 ~ PB15 通用推挽
GPIOB->CRH |= 0x3333 << 16;
GPIOD->CRH &= ~(0xff); //PD8/PD9 通用推挽
GPIOD->CRH |= 0x33;
////////////////////////////
////***** T5 **************
RCC->APB1ENR |= 8; //使能TIM5时钟
TIM5->CR1 |= 1<<4; //向下计数
TIM5->DIER = 0;
TIM5->DIER |= 1; //允许更新中断
TIM5->PSC = 11; ///72 /(11+1) = 6M T2时钟;
Set_Channel_NVIC(50, 3);//低优先级1
////////////////////////////
////***** T2 **************
}
////---------------------------------------------------------------------------
////********* *************8
//电机最低速度 1.512°/s , 0.0042转/s
void Set_FWSpeed(s32 ispeed) //0.1°/s
{
s32 tempspeed=0;
u8 speeddatastr[16]={0};
u8 temp_speeddatastr[6]={0};
// char speedTemp;
speeddatastr[0] = 0X73; // 's'
speeddatastr[1] = 0X20; // ' '
speeddatastr[2] = 0X72; // 'r'
speeddatastr[3] = 0X30; // '0'
speeddatastr[4] = 0X78; // 'x'
speeddatastr[5] = 0X32; // '2'
speeddatastr[6] = 0X66; // 'f'
speeddatastr[7] = 0X20; // ' '
// speeddatastr[8] = 'D'; //速度方向位
speeddatastr[9] = 0X30; // '0'
speeddatastr[10] = 0X30; // '0'
speeddatastr[11] = 0X30; // '0'
speeddatastr[12] = 0X30; // '0'
speeddatastr[13] = 0X30; // '0'
speeddatastr[14] = 0X30; // '0'
speeddatastr[15] = 0x0D; // ' '
if (FW_Max_Speed < ispeed)
ispeed = FW_Max_Speed;
else if (-FW_Max_Speed > ispeed)
ispeed = -FW_Max_Speed;
old_fwspeed = ispeed;
if(0 < ispeed)
{
speeddatastr[8] = 0x2D;
}
else
{
speeddatastr[8] = 0x30;
}
tempspeed =(abs(ispeed) *6250/3 ); //转换为电机速度 转/s,减速度比为 1:375
my_itoa(tempspeed, temp_speeddatastr, 10) ;
speeddatastr[9] = temp_speeddatastr[0]; // '0'
speeddatastr[10] = temp_speeddatastr[1]; // '0'
speeddatastr[11] = temp_speeddatastr[2]; // '0'
speeddatastr[12] = temp_speeddatastr[3]; // '0'
speeddatastr[13] = temp_speeddatastr[4]; // '0'
speeddatastr[14] = temp_speeddatastr[5]; // '0'
Uart4_Send1(&speeddatastr[0] , 16);
}
void Driver_Init()
{
char EN_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x32,0x34,0x20,0x31,0x31,0x0d};
char ACC_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x33,0x36,0x20,0x35,0x30,0x0d};
char DEC_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x33,0x37,0x20,0x35,0x30,0x0d};
Uart4_send_str(&EN_D_Cmd[0],11);
SysTimeCnt = 0;
while(200 > SysTimeCnt);
SysTimeCnt = 0;
Uart4_send_str(&EN_D_Cmd[0],11);
SysTimeCnt = 0;
while(200 > SysTimeCnt);
SysTimeCnt = 0;
Uart4_send_str(&EN_D_Cmd[0],11);
SysTimeCnt = 0;
while(200 > SysTimeCnt);
SysTimeCnt = 0;
Uart4_send_str(&DEC_D_Cmd[0],11);
SysTimeCnt = 0;
while(200 > SysTimeCnt);
SysTimeCnt = 0;
Uart4_send_str(&ACC_D_Cmd[0],11);
SysTimeCnt = 0 ;
}
void Urgent_Stop_FW()
{
char STOP_D_Cmd[10] ={0x73,0x20,0x72,0x30,0x78,0x32,0x34,0x20,0x30,0x0d};
char DEC_D_Cmd[10] ={0x73,0x20,0x72,0x30,0x78,0x33,0x37,0x20,0x31,0x0d};
SysTimeCnt = 0;
Uart4_send_str(&STOP_D_Cmd[0],11);
while(500 > SysTimeCnt);
SysTimeCnt = 0;
while(500 > SysTimeCnt);
SysTimeCnt = 0;
Uart4_send_str(&DEC_D_Cmd[0],10);
}
下面是主函数
//****************************************************************//
//**************************** main.c *************************//
//****************************************************************//
#include <stm32f10x_lib.h>
#include <stdlib.h>
#include "sys.h"
#include "main.h"
#include "peripheral.h"
#include "motor.h"
#include "usart.h"
int main(void)
{
s16 ispeed =-120;
SysTimeCnt = 0;
Sys_Init(); //cpu 系统初始化,时钟、中断等
Peripheral_Init(); //MCU外设接口初始化,uart, pwm, timer,spi等
TIM_Timer_Init();
Motor_Init();
Uart_Init();
Driver_Init();
while(1)
{
if(SysTimeCnt >=200)
{
SysTimeCnt = 0;
Set_FWSpeed(ispeed);
}
}
}
|
|