diff --git a/src/stm32_src_mtn.cpp b/src/stm32_src_mtn.cpp
index 250ff632a711a1adbd99ff7c6c66c48fdb01dfcb..ba7ac4317df9007b71890c96a11e88ed60865d30 100644
--- a/src/stm32_src_mtn.cpp
+++ b/src/stm32_src_mtn.cpp
@@ -1,6 +1,7 @@
 #include "robotis_bin_parser.h"
 #include "stm32_src_mtn.h"
 #include <string.h>
+#include <math.h>
 #include <iomanip>
 
 CSTM32SrcMtn::CSTM32SrcMtn()
@@ -86,7 +87,7 @@ unsigned char CSTM32SrcMtn::compute_checksum(int page_id)
   checksum+=(unsigned char)page.get_repetitions();
   checksum+=0x0A;
   checksum+=(unsigned char)page.get_num_steps();
-  checksum+=(unsigned char)(page.get_speed_rate()*32);
+  checksum+=(unsigned char)((1.0/page.get_speed_rate())*32);
   checksum+=(unsigned char)page.get_inertial();
   checksum+=(unsigned char)page.get_next_page();
   checksum+=(unsigned char)page.get_exit_page();
@@ -152,7 +153,7 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename)
       this->write_byte_vector(file,std::vector<unsigned char>(3,0),3); 
       this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_num_steps()),3); 
       this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); 
-      this->write_byte_vector(file,std::vector<unsigned char>(1,(1.0/page.get_speed_rate())*32),3); 
+      this->write_byte_vector(file,std::vector<unsigned char>(1,((1.0/page.get_speed_rate())*32)),3); 
       this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); 
       this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_inertial()),3); 
       this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_next_page()),3);