Skip to content

Commit

Permalink
For testing sending data over UART, to read realtime angle and send c…
Browse files Browse the repository at this point in the history
…ommand to increase/decrease the angle
  • Loading branch information
casainho committed Aug 9, 2017
1 parent 30fa991 commit 15439cd
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 23 deletions.
2 changes: 1 addition & 1 deletion Flash_Debug-STM8.launch
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;ui8_temp-ADC1_IRQHandler-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;temp1-apply_duty_cycle-(format)&quot; val=&quot;0&quot;/&gt;&lt;content id=&quot;temp1-apply_duty_cycle-(cast)&quot; val=&quot;int&quot;/&gt;&lt;content id=&quot;a-main-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;b-main-(format)&quot; val=&quot;0&quot;/&gt;&lt;content id=&quot;b-main-(cast)&quot; val=&quot;unsigned char&quot;/&gt;&lt;content id=&quot;ui8_temp-adc_read_throttle-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;ui8_temp-TIM1_UPD_OVF_TRG_BRK_IRQHandler-(format)&quot; val=&quot;1&quot;/&gt;&lt;/contentList&gt;"/>
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;ui8_temp-TIM1_UPD_OVF_TRG_BRK_IRQHandler-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;ui8_temp-adc_read_throttle-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;b-main-(cast)&quot; val=&quot;unsigned char&quot;/&gt;&lt;content id=&quot;b-main-(format)&quot; val=&quot;0&quot;/&gt;&lt;content id=&quot;a-main-(format)&quot; val=&quot;1&quot;/&gt;&lt;content id=&quot;temp1-apply_duty_cycle-(cast)&quot; val=&quot;int&quot;/&gt;&lt;content id=&quot;temp1-apply_duty_cycle-(format)&quot; val=&quot;0&quot;/&gt;&lt;content id=&quot;ui8_temp-ADC1_IRQHandler-(format)&quot; val=&quot;1&quot;/&gt;&lt;/contentList&gt;"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;globalVariableList/&gt;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList&gt;&#10;&lt;memoryBlockExpressionItem&gt;&#10;&lt;expression text=&quot;0x40000000&quot;/&gt;&#10;&lt;/memoryBlockExpressionItem&gt;&#10;&lt;memoryBlockExpressionItem&gt;&#10;&lt;expression text=&quot;0x40000424&quot;/&gt;&#10;&lt;/memoryBlockExpressionItem&gt;&#10;&lt;/memoryBlockExpressionList&gt;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="/home/cas/OpenSource-EBike-firmware/BMSBattery_S_controllers_firmware/main.elf"/>
Expand Down
2 changes: 1 addition & 1 deletion cruise_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ uint8_t cruise_control (uint8_t ui8_value)
ui32_cruise_counter++;
ui8_cruise_output = ui8_value;

if (ui32_cruise_counter > 100) // time control: time to lock cruise control
if (ui32_cruise_counter > 25) // 100 time control: time to lock cruise control
{
ui8_cruise_state = 1;
ui8_cruise_output = ui8_value;
Expand Down
12 changes: 10 additions & 2 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ int main (void)
static float f_temp = 0;

ui16_temp_delay = TIM2_GetCounter ();
if ((ui16_temp_delay - ui16_throttle_counter) > 25)
// if ((ui16_temp_delay - ui16_throttle_counter) > 25)
if ((ui16_temp_delay - ui16_throttle_counter) > 100)
{
ui16_throttle_counter = ui16_temp_delay;

Expand Down Expand Up @@ -145,7 +146,14 @@ int main (void)
// printf("%d\n", (uint16_t) ui32_LPF_temp);
//
// printf("%d\n", ui16_PWM_cycles_counter_value_temp);
printf("%d, %d\n", ui16_log1, ui16_log2);



// printf("%d, %d\n", ui16_log1, ui16_log2);

getchar1 ();

printf("%d\n", ui8_position_correction_value);
}


Expand Down
68 changes: 49 additions & 19 deletions motor.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ uint16_t ui16_speed_inverse = 0;
uint8_t ui8_motor_rotor_position = 0; // in 360/256 degrees
uint8_t ui8_motor_rotor_absolute_position = 0; // in 360/256 degrees
uint8_t ui8_position_correction_value = 0; // in 360/256 degrees
uint8_t ui16_PWM_cycles_correction_value = 0; // in 360/256 degrees
uint16_t ui16_PWM_cycles_counter_total = 0;
uint16_t ui16_PWM_cycles_counter_total_filtered = 0;
uint16_t ui16_PWM_cycles_counter_total_accumulated = 0;
uint16_t ui16_PWM_cycles_counter_angle_track_filtered = 0;
uint16_t ui16_PWM_cycles_counter_angle_track_accumulated = 0;
uint8_t ui8_interpolation_angle = 0;
uint8_t ui8_interpolation_angle_temp = 0;
uint8_t ui8_interpolation_angle_old = 0;
Expand All @@ -45,7 +46,8 @@ int8_t hall_sensors;
int8_t hall_sensors_last = 0;

uint8_t ui8_angle_track_flag = 0;

uint16_t ui16_position_correction_value_accumulated = 0;
uint16_t ui16_position_correction_value_filtered = 0;

//uint8_t ui8_debug = 0;
//uint16_t ui16_debug = 0;
Expand Down Expand Up @@ -77,27 +79,27 @@ void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) __interrupt(TIM1_UPD_OVF_TRG_BRK_IRQH
{
ui8_angle_track_flag = 0;

ui16_PWM_cycles_counter_total_accumulated -= ui16_PWM_cycles_counter_total_accumulated >> 6;
ui16_PWM_cycles_counter_total_accumulated += ui16_PWM_cycles_counter;
ui16_PWM_cycles_counter_total_filtered = ui16_PWM_cycles_counter_total_accumulated >> 6;
ui16_PWM_cycles_counter_angle_track_accumulated -= ui16_PWM_cycles_counter_angle_track_accumulated >> 6;
ui16_PWM_cycles_counter_angle_track_accumulated += ui16_PWM_cycles_counter;
ui16_PWM_cycles_counter_angle_track_filtered = ui16_PWM_cycles_counter_angle_track_accumulated >> 6;

//ui16_log1 = ui16_motor_speed_erps;
//ui16_log2 = ui8_motor_rotor_position;
//ui16_log2 = ui16_PWM_cycles_counter_angle_track_filtered;
}
}


ui16_temp = (ui16_PWM_cycles_counter_total_filtered >> 1) + (ui16_PWM_cycles_counter_total_filtered >> 2); // 3/4
if (ui16_PWM_cycles_counter == ui16_temp)
{
// debug_pin_set ();
ui16_log1 = ui16_PWM_cycles_counter_total_filtered - ui16_PWM_cycles_counter;

ui16_log2 = ((ui16_log1 << 8) / ui16_PWM_cycles_counter_total);

// ui16_log2 = (uint16_t) ui8_position_correction_value;
}
else { /* debug_pin_reset (); */ }
// ui16_temp = (ui16_PWM_cycles_counter_angle_track_filtered >> 1) + (ui16_PWM_cycles_counter_angle_track_filtered >> 2); // 3/4
// if (ui16_PWM_cycles_counter == ui16_temp)
// {
//// debug_pin_set ();
// ui16_log1 = ui16_PWM_cycles_counter_angle_track_filtered - ui16_PWM_cycles_counter;
//
// ui16_log2 = ((ui16_log1 << 8) / ui16_PWM_cycles_counter_total);
//
//// ui16_log2 = (uint16_t) ui8_position_correction_value;
// }
// else { /* debug_pin_reset (); */ }


hall_sensors_read_and_action ();
Expand All @@ -121,6 +123,9 @@ void hall_sensor_init (void)

void hall_sensors_read_and_action (void)
{
uint8_t ui8_temp;
uint16_t ui16_temp;

// read hall sensors signal pins and mask other pins
hall_sensors = (GPIO_ReadInputData (HALL_SENSORS__PORT) & (HALL_SENSORS_MASK));
if ((hall_sensors != hall_sensors_last) ||
Expand Down Expand Up @@ -153,6 +158,24 @@ void hall_sensors_read_and_action (void)
break;

case 5:
// find the phase current B lag
// ui16_temp = ui16_PWM_cycles_counter_angle_track_filtered - ui16_PWM_cycles_counter;
// ui8_temp = (uint8_t) ((ui16_temp << 8) / ui16_PWM_cycles_counter_total);

// ui16_position_correction_value_accumulated -= ui16_position_correction_value_accumulated >> 3;
// ui16_position_correction_value_accumulated += (uint16_t) ui8_temp;
// ui16_position_correction_value_filtered = ui16_position_correction_value_accumulated >> 3;
//
//
// ui8_position_correction_value = ui16_position_correction_value_filtered - 10;

ui16_PWM_cycles_correction_value = ui16_PWM_cycles_counter_angle_track_filtered - ui16_PWM_cycles_counter;


//ui16_log1 = ui16_PWM_cycles_counter;
//ui16_log2 = ui16_PWM_cycles_counter_angle_track_filtered;


if (motor_state != MOTOR_STATE_RUNNING)
{
ui8_motor_rotor_absolute_position = ANGLE_240;
Expand Down Expand Up @@ -244,6 +267,8 @@ void hall_sensors_read_and_action (void)
// runs every 64us (PWM frequency)
void motor_fast_loop (void)
{
uint16_t ui16_temp;

// count number of fast loops / PWM cycles
if (ui16_PWM_cycles_counter < PWM_CYCLES_COUNTER_MAX)
{
Expand All @@ -268,9 +293,14 @@ void motor_fast_loop (void)
// interpolation seems a problem when motor starts, so avoid to do it at very low speed
if (motor_state == MOTOR_STATE_RUNNING)
{
ui8_interpolation_angle = (uint8_t) ((ui16_PWM_cycles_counter << 8) / ui16_PWM_cycles_counter_total);
// ui16_temp = ui16_PWM_cycles_counter + ui16_PWM_cycles_correction_value;
ui16_temp = ui16_PWM_cycles_counter;
ui8_interpolation_angle = (uint8_t) ((ui16_temp << 8) / ui16_PWM_cycles_counter_total);

ui8_motor_rotor_position = (uint8_t) (ui8_motor_rotor_absolute_position + ui8_position_correction_value + ui8_interpolation_angle);

ui16_log1 = ui16_PWM_cycles_counter_total;
ui16_log2 = ui16_PWM_cycles_correction_value;
}
#endif

Expand Down
1 change: 1 addition & 0 deletions motor.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#define MOTOR_STATE_RUNNING 2

extern uint8_t ui8_motor_rotor_position;
extern uint8_t ui8_position_correction_value;

void hall_sensor_init (void);
void hall_sensors_read_and_action (void);
Expand Down
25 changes: 25 additions & 0 deletions uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <stdint.h>
#include "stm8s.h"
#include "stm8s_uart2.h"
#include "motor.h"

void uart_init (void)
{
Expand Down Expand Up @@ -41,3 +42,27 @@ char getchar(void)

return (c);
}

char getchar1(void)
{
uint8_t c = 0;

if (UART2_GetFlagStatus(UART2_FLAG_RXNE) == RESET)
{
return 255;
}

c = UART2_ReceiveData8();

if (c == '0')
{
ui8_position_correction_value--;
}

if (c == '1')
{
ui8_position_correction_value++;
}

return (c);
}
1 change: 1 addition & 0 deletions uart.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@
void uart_init (void);
void putchar(char c);
char getchar(void);
char getchar1(void);

#endif /* _UART_H */

0 comments on commit 15439cd

Please sign in to comment.