Fix CAN
This commit is contained in:
parent
147bad14bb
commit
bbdf967e6d
3 changed files with 33 additions and 11 deletions
|
@ -1,8 +1,8 @@
|
||||||
#ifndef REG_CAH_H_
|
#ifndef REG_CAH_H_
|
||||||
#define REG_CAH_H_
|
#define REG_CAH_H_
|
||||||
|
|
||||||
#define APP_ADDR 0x08004000 // 16KB - Application
|
#define APP_ADDR 0x0800400 // 16KB - Application
|
||||||
#define ADDR_VAR 0x80400000
|
#define ADDR_VAR 0x8040000
|
||||||
#define ADDR_VAR_ID ADDR_VAR
|
#define ADDR_VAR_ID ADDR_VAR
|
||||||
#define ADDR_VAR_P (ADDR_VAR + 1)
|
#define ADDR_VAR_P (ADDR_VAR + 1)
|
||||||
#define ADDR_VAR_I (ADDR_VAR + 2)
|
#define ADDR_VAR_I (ADDR_VAR + 2)
|
||||||
|
|
|
@ -18,10 +18,12 @@ upload_protocol = stlink
|
||||||
debug_tool = stlink
|
debug_tool = stlink
|
||||||
monitor_speed = 19200
|
monitor_speed = 19200
|
||||||
monitor_parity = N
|
monitor_parity = N
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
-DSTM32F446xx
|
-DSTM32F446xx
|
||||||
-D HAL_CAN_MODULE_ENABLED
|
-D HAL_CAN_MODULE_ENABLED
|
||||||
-D SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
|
-D SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
askuric/Simple FOC@^2.3.4
|
askuric/Simple FOC@^2.3.4
|
||||||
pazi88/STM32_CAN@^1.1.2
|
pazi88/STM32_CAN@^1.1.2
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// clang-format off
|
// clang-format off
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
#include "stm32f446xx.h"
|
||||||
#include <SimpleFOC.h>
|
#include <SimpleFOC.h>
|
||||||
#include <STM32_CAN.h>
|
#include <STM32_CAN.h>
|
||||||
#include <AS5045.h>
|
#include <AS5045.h>
|
||||||
|
@ -126,7 +127,8 @@ void send_motor_enabled() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_foc_state() {
|
void send_foc_state() {
|
||||||
CAN_TX_msg.id = 1;
|
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||||
|
CAN_TX_msg.id = FOC_STATE;
|
||||||
CAN_TX_msg.buf[0] = 'F';
|
CAN_TX_msg.buf[0] = 'F';
|
||||||
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
|
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
|
||||||
sizeof(motor_control_inputs.foc_state));
|
sizeof(motor_control_inputs.foc_state));
|
||||||
|
@ -135,13 +137,11 @@ Can.write(CAN_TX_msg);
|
||||||
|
|
||||||
void send_id() {
|
void send_id() {
|
||||||
/* data for reading of firmware */
|
/* data for reading of firmware */
|
||||||
FLASH->KEYR = 0x45670123; // Первый ключ
|
|
||||||
FLASH->KEYR = 0xCDEF89AB; // Второй ключ
|
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||||
uint8_t id = *(volatile uint32_t*)ADDR_VAR_ID;
|
|
||||||
FLASH->CR |= FLASH_CR_LOCK;
|
|
||||||
CAN_TX_msg.id = id;
|
CAN_TX_msg.id = id;
|
||||||
memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id));
|
memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id));
|
||||||
Can.write(CAN_TX_msg);
|
Can.write(CAN_TX_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_id(uint8_t my_id) {
|
void setup_id(uint8_t my_id) {
|
||||||
|
@ -203,8 +203,8 @@ void send_data() {
|
||||||
|
|
||||||
|
|
||||||
void listen_can() {
|
void listen_can() {
|
||||||
uint8_t reg_id = CAN_inMsg.id;
|
uint8_t reg_id = CAN_inMsg.buf[0]; //reg id
|
||||||
if (CAN_inMsg.buf[0] == *(volatile uint8_t*)ADDR_VAR_ID) {
|
if (CAN_inMsg.id == *(volatile uint8_t*)ADDR_VAR_ID) {
|
||||||
if (CAN_inMsg.buf[1] == REG_WRITE) {
|
if (CAN_inMsg.buf[1] == REG_WRITE) {
|
||||||
switch (reg_id) {
|
switch (reg_id) {
|
||||||
case REG_ID:
|
case REG_ID:
|
||||||
|
@ -237,7 +237,22 @@ void listen_can() {
|
||||||
case REG_ID:
|
case REG_ID:
|
||||||
send_id();
|
send_id();
|
||||||
break;
|
break;
|
||||||
|
case MOTOR_VELOCITY:
|
||||||
|
send_velocity();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOTOR_ANGLE:
|
||||||
|
send_angle();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOTOR_ENABLED:
|
||||||
|
send_motor_enabled();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FOC_STATE:
|
||||||
|
send_foc_state();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -277,7 +292,8 @@ void foc_step(BLDCMotor *motor, Commander *commander) {
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
/* bias for vector int */
|
/* bias for vector int */
|
||||||
SCB->VTOR = APP_ADDR;
|
//SCB->VTOR = 0x08004000;
|
||||||
|
|
||||||
|
|
||||||
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
||||||
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
||||||
|
@ -294,6 +310,10 @@ void setup() {
|
||||||
SendTimer->setOverflow(100, HERTZ_FORMAT); // 50 Hz
|
SendTimer->setOverflow(100, HERTZ_FORMAT); // 50 Hz
|
||||||
SendTimer->attachInterrupt(send_data);
|
SendTimer->attachInterrupt(send_data);
|
||||||
SendTimer->resume();
|
SendTimer->resume();
|
||||||
|
for(int i = 0;i < 10;i++){
|
||||||
|
GPIOC->ODR ^= GPIO_ODR_OD10;
|
||||||
|
HAL_Delay(1000);
|
||||||
|
}
|
||||||
setup_foc(&encoder, &motor, &driver, ¤t_sense, &command, doMotor);
|
setup_foc(&encoder, &motor, &driver, ¤t_sense, &command, doMotor);
|
||||||
|
|
||||||
/* Настройка параметров стирания */
|
/* Настройка параметров стирания */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue