1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Avem-Avem

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
main.c 3.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
but0n Отправлено 8 лет назад ba766ae
#include "FreeRTOS.h"
#include "task.h"
#include <math.h>
#include "stm32f10x.h"
#include "bit.h"
#include "mpu6050.h"
#include "motor.h"
#include "uart.h"
#include "wifi.h"
#include "pid.h"
#include "tty.h"
#define ISP_ADDR 0x1FFFF000
void jump2ISP() {
__set_MSP(*(unsigned int *)ISP_ADDR);
((void (*)(void))*((unsigned int *)(ISP_ADDR + 4)))();
}
double _asin(double i) {return asin(i);}
double _atan2(double i,double k) {return atan2(i,k);}
double _sqrt(double i) {return sqrt(i);}
//ms
void delay(unsigned int t) {
SysTick->LOAD = 9000 * t;
SysTick->VAL = 0;
SysTick->CTRL = 0x01;
for(unsigned int tmp = SysTick->CTRL;(tmp&0x01)&&(!(tmp&SysTick_CTRL_COUNTFLAG));tmp = SysTick->CTRL);
SysTick->CTRL = 0;
SysTick->VAL = 0;
}
#define DEBUG_BLDC //Config
#if defined (DEBUG_MPU6050_EULER) || defined (DEBUG_MPU6050_SOURCEDATA) || defined (DEBUG_BLDC)
SixAxis sourceData;
#else
#error Which Debug type are you using? Define DEBUG_XXXX in your compiler options.
#endif
// float InnerLast; //保存内环旧值以便后向差分
// float OutterLast; //保存外环旧值以便后向差分
// float *Feedback; //反馈数据, 实时的角度数据
// float *Gyro; //角速度
// float Error; //误差值
// float p; //比例项(内环外环共用)
// float i; //积分项(仅用于外环)
// float d; //微分项(内环外环共用)
// short output; //PID输出, 用来修改PWM值, 2字节
// __IO uint16_t *Channel1; //PWM输出, 通道1
// __IO uint16_t *Channel2; //PWM输出, 通道2
#ifdef DEBUG_BLDC
pid_st g_pid_roll = {
.InnerLast = 0,
.OutterLast = 0,
.Feedback = &g_Roll,
.i = 0,
.Channel1 = &MOTOR2,
.Channel2 = &MOTOR4,
.Gyro = &sourceData.gX,
};
#endif
void mpu_task() {
while(1) {
MPU6050_getStructData(&sourceData);
IMU_Comput(sourceData);
vTaskDelay(10);
}
}
#ifdef DEBUG_BLDC
void pid_task() {
while(1) {
pid_SingleAxis(&g_pid_roll, 0);
vTaskDelay(10);
}
}
#endif
void uart_task() {
while(1) {
uart_sendStr("Pitch Angle: ");
uart_Float2Char(g_Pitch);
uart_sendStr("; Roll Angle: ");
uart_Float2Char(g_Roll);
uart_sendStr("; Yaw Angle: ");
uart_Float2Char(g_Yaw);
UART_CR();
vTaskDelay(100);
}
}
void uart_debugPID() {
while(1) {
TTY_CLEAR();
TTY_RED();
uart_sendStr(" Motor占空比: ");
TTY_NONE();
TTY_BLUE();
uart_showData(*g_pid_roll.Channel1);
uart_sendStr("\t");
uart_showData(*g_pid_roll.Channel2);
TTY_NONE();
uart_sendStr("\n\rRoll:\t");
uart_Float2Char(*g_pid_roll.Feedback);
uart_sendStr("\tGyro:\t");
uart_Float2Char(*g_pid_roll.Gyro);
uart_sendStr("\n\rP:\t");
uart_Float2Char(g_pid_roll.p);
uart_sendStr("\n\rI:\t");
uart_Float2Char(g_pid_roll.i);
uart_sendStr("\n\rD:\t");
uart_Float2Char(g_pid_roll.d);
uart_sendStr("\n\r=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=\n\rInner Cache:\t");
uart_Float2Char(g_pid_roll.InnerLast);
uart_sendStr("\n\rOutter Cache:\t");
uart_Float2Char(g_pid_roll.OutterLast);
uart_sendStr("\n\rOutput:\t\t");
TTY_RED();
uart_showData(g_pid_roll.output);
TTY_NONE();
uart_sendStr("\n\r");
vTaskDelay(100);
}
}
int main() {
#ifdef DEBUG_BLDC
//Brushless motor auto init
MOTOR_SETTING();
#endif
uart_init(72, 115200);
uart_sendStr("Config MPU6050...");
UART_CR();
MPU_init();
uart_sendStr("MPU6050 Connect Success!");
UART_CR();
xTaskCreate(uart_task, "UART_TASK", 100, NULL, 1, NULL);
xTaskCreate(mpu_task, "MPU_TASK", 100, NULL, 3, NULL);
xTaskCreate(pid_task, "PID_TASK", 100, NULL, 2, NULL);
vTaskStartScheduler();
uart_sendStr("Stack Overflow...");
while(1);
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/Avem-Avem.git
git@gitlife.ru:oschina-mirror/Avem-Avem.git
oschina-mirror
Avem-Avem
Avem-Avem
master