Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 11:82d8768d7351
- Parent:
- 10:83a6baa77a2e
- Child:
- 12:6f2531038ea4
--- a/main.cpp Fri Aug 23 01:02:32 2019 +0000
+++ b/main.cpp Fri Aug 23 12:28:08 2019 +0000
@@ -5,6 +5,7 @@
#include "SPI_EEP_ENC.h"
#include "I2C_AS5510.h"
#include "setting.h"
+#include "function_utilities.h"
// dac & check ///////////////////////////////////////////
DigitalOut check(PC_2);
@@ -27,7 +28,7 @@
DigitalOut eeprom_cs(PB_12);
SPI enc(PC_12,PC_11,PC_10);
DigitalOut enc_cs(PD_2);
-DigitalOut indi_led(PA_15);
+DigitalOut LED(PA_15);
// UART ///////////////////////////////////////////
Serial pc(PA_9,PA_10); // _ UART
@@ -35,6 +36,10 @@
// CAN ///////////////////////////////////////////
CAN can(PB_8, PB_9, 1000000);
CANMessage msg;
+void onMsgReceived()
+{
+ CAN_RX_HANDLER();
+}
// Variables ///////////////////////////////////////////
State pos;
@@ -50,7 +55,7 @@
double V_MAX = 12000.0; // Maximum Voltage : 12V = 12000mV
double PWM_out=0.0;
-
+int ID_index_array[100] = {0};
// =============================================================================
// =============================================================================
// =============================================================================
@@ -61,44 +66,61 @@
*** Initialization
*********************************/
- indi_led = 0;
+ LED = 1;
pc.baud(9600);
-
- //Timer t;
- //t.start();
- //t.stop();
- //pc.printf("The time taken was %f seconds\n",t.read());
// i2c init
i2c.frequency(400 * 1000); // 0.4 mHz
wait_ms(2); // Power Up wait
look_for_hardware_i2c(); // Hardware present
init_as5510(i2c_slave_addr1);
+ make_delay();
// // spi init
eeprom.format(8,3);
eeprom.frequency(5000000); //5M
enc.format(8,0);
enc.frequency(5000000); //5M
+ make_delay();
// ADC init
Init_ADC();
+ make_delay();
// Pwm init
Init_PWM();
TIM4->CR1 ^= TIM_CR1_UDIS;
+ make_delay();
-// //SPI
-// spi_eeprom_ready();
-// spi_eeprom_write(0x1,0x112);
-// spi_eeprom_ready();
-// int i = spi_eeprom_read(0x1);
+ // TMR3 init
+ Init_TMR3();
+ TIM3->CR1 ^= TIM_CR1_UDIS;
+ make_delay();
// CAN
can.attach(&CAN_RX_HANDLER);
+ CAN_ID_INIT();
+ make_delay();
// spi _ enc
spi_enc_set_init();
+ make_delay();
+
+ //eeprom
+ ROM_INIT_DATA();
+ make_delay();
+
+ //DAC init
+ dac_1 = PRES_A_VREF/3.3;
+ dac_2 = PRES_B_VREF/3.3;
+ make_delay();
+
+ for (int i=0; i<100; i++){
+ if(i%2==0)
+ ID_index_array[i] = - i * 0.5;
+ else
+ ID_index_array[i] = (i+1) * 0.5;
+ }
/************************************
@@ -107,16 +129,10 @@
while(1) {
//spi _ enc
- int a = spi_enc_read();
+ //int a = spi_enc_read();
+
//i2c
read_field(i2c_slave_addr1);
-
- check_2=0;
-
- pc.printf("%f\n",1234567);
-// pc.printf("%d\n",a1);
-
-// wait(0.01f);
}
}
@@ -138,31 +154,39 @@
********************************************************/
if((CNT_TMR4%2)==0){
- //spi
- // eeprom.write(0xff);
- // eeprom.write(0xff);
- // ready();
- // read(1);
-
- //i2c
- //// read_field(i2c_slave_addr1);
//ADC
ADC3->CR2 |= 0x40000000; // adc _ 12bit
- // a1=ADC1->DR;
- // a1=ADC2->DR;
-// int raw_cur = ADC3->DR;
+// a1=ADC1->DR;
+// a1=ADC2->DR;
+// int raw_cur = ADC3->DR;
while((ADC3->SR & 0b10));
double alpha_update_cur = 1.0/(1.0+(FREQ_TMR4/2.0)/(2.0*3.14*1000.0)); // f_cutoff : 500Hz
double cur_new = ((double)ADC3->DR-2048.0)*20.0/4096.0; // unit : mA
cur.sen=cur.sen*(1.0-alpha_update_cur)+cur_new*(alpha_update_cur);
-
}
//DAC
// dac_1 = ADC1->DR;
// dac_2 = ADC2->DR;
+
+
+
+ /*******************************************************
+ *** Timer Counting & etc.
+ ********************************************************/
+ CNT_TMR4++;
+ }
+ TIM4->SR = 0x0; // reset the status register
+}
+
+unsigned long CNT_TMR3 = 0;
+double FREQ_TMR3 = (double)FREQ_5k;
+double DT_TMR3 = (double)DT_5k;
+extern "C" void TIM3_IRQHandler(void)
+{
+ if ( TIM3->SR & TIM_SR_UIF ) {
/*******************************************************
*** Valve Control
@@ -199,30 +223,47 @@
/*******************************************************
*** Data Send (CAN) & Print out (UART)
********************************************************/
- if((CNT_TMR4%40)==0){
- msg.id = 50;
- msg.len = 4;
- int temp_CUR = (int)(cur.sen*1000.0);
- msg.data[0]=0x00FF&temp_CUR;
- msg.data[1]=0x00FF&(temp_CUR>>8);
- int temp_PWM = (int)(V_out);
- msg.data[2]=0x00FF&temp_PWM;
- msg.data[3]=0x00FF&(temp_PWM>>8);
- can.write(msg);
+ //if((CNT_TMR3%40)==0){
+// msg.id = 50;
+// msg.len = 4;
+// int temp_CUR = (int)(cur.sen*1000.0);
+// msg.data[0]=0x00FF&temp_CUR;
+// msg.data[1]=0x00FF&(temp_CUR>>8);
+// int temp_PWM = (int)(V_out);
+// msg.data[2]=0x00FF&temp_PWM;
+// msg.data[3]=0x00FF&(temp_PWM>>8);
+// can.write(msg);
+// }
+
+ if((CNT_TMR3%5000)==0){
+ if(LED==1)
+ {
+ LED=0;
+ }
+ else
+ LED = 1;
+// LED != LED;
}
-// if((CNT_TMR4%4000)==0){
-// pc.printf("%d\n",a1);
-// }
-
/*******************************************************
*** Timer Counting & etc.
********************************************************/
- CNT_TMR4++;
+ CNT_TMR3++;
}
- TIM4->SR = 0x0; // reset the status register
+ TIM3->SR = 0x0; // reset the status register
}
+/*******************************************************************************
+ * REFERENCE MODE
+ ******************************************************************************/
+enum _REFERENCE_MODE{
+ MODE_REF_NO_ACT = 0, //0
+ MODE_REF_DIRECT, //1
+ MODE_REF_COS_INC, //2
+ MODE_REF_LINE_INC, //3
+ MODE_REF_SIN_WAVE, //4
+ MODE_REF_SQUARE_WAVE, //5
+};
/*******************************************************************************
* CONTROL MODE
@@ -252,6 +293,10 @@
MODE_PRESSURE_SENSOR_NULLING, //24
MODE_PRESSURE_SENSOR_CALIB, //25
MODE_ROTARY_FRICTION_TUNING, //26
+
+ MODE_DDV_POS_VS_PWM_ID = 30, //30
+ MODE_DDV_DEADZONE_AND_CENTER, //31
+ MODE_DDV_POS_VS_FLOWRATE, //32
};
void ValveControl(unsigned int ControlMode)